import crypto from 'crypto';
import jwt from 'jsonwebtoken';
import XLSX  from "xlsx";

/**
 * MD5加密
 * @param {string} text 要加密的文本
 * @returns {string} 加密后的字符串
 */
export function md5(text) {
    return crypto.createHash('md5')
        .update(text)
        .digest('hex');
}


// 生成 token
export const generateToken = (user) => {
    // JWT 密钥
    const SECRET_KEY = 'flow2025';

    return jwt.sign(
        { id: user.PK, userId: user.USERID, },
        SECRET_KEY,
        { expiresIn: '24h' } // token 有效期
    );
};

// 验证 token 的中间件
export const verifyToken = (req, res, next) => {
    const token = req.headers.authorization;
    const SECRET_KEY = 'flow2025';

    if (!token) {
        return res.status(401).json({
            success: false,
            msg: '未提供token'
        });
    }

    try {
        const decoded = jwt.verify(token, SECRET_KEY);
        req.user = decoded; // 将解码后的用户信息添加到 request 对象
        return next();
    } catch (err) {
        console.log(err)
        return res.status(401).json({
            success: false,
            msg: 'token无效或已过期'
        });
    }
};


export const paramList = (pkList)=>{
    const placeholders = pkList.map((_, i) => `:pk${i}`).join(',');
        const params = {};
        pkList.forEach((pk, i) => {
            params[`pk${i}`] = pk;
        });
      return  {placeholders,params}
}


export const parseExcelDate = (val) => {
    // 数字类型：Excel序列号
    if (typeof val === 'number') {
        const date = XLSX.SSF.parse_date_code(val);
        if (date) {
            const mm = String(date.m).padStart(2, '0');
            const dd = String(date.d).padStart(2, '0');
            return `${date.y}-${mm}-${dd}`;
        }
    }
    // ISO字符串类型
    if (typeof val === 'string') {
        // ISO格式
        if (/^\d{4}-\d{2}-\d{2}T/.test(val)) {
            const d = new Date(val);
            if (!isNaN(d)) {
                const mm = String(d.getMonth() + 1).padStart(2, '0');
                const dd = String(d.getDate()).padStart(2, '0');
                return `${d.getFullYear()}-${mm}-${dd}`;
            }
        }
        // yyyy-mm-dd格式
        if (/^\d{4}-\d{2}-\d{2}$/.test(val)) {
            return val;
        }
    }
    return '';
};